package controll;


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import modell.Cidade;
import modell.Construtora;
import modell.Estado;
import modell.Obra;
import modell.Periodo;

@ManagedBean(name = "obraBean")
@RequestScoped
public class ObraBean{

	private Obra obraSelecionada = new Obra();
	private Estado estadoSelecionado;
	private Cidade cidadeSelecionada;

	private List<Obra> lista = null;
	private List<SelectItem> cidadesSelect;
	private List<SelectItem> estadosSelect;
	private List<SelectItem> construtoraSelect;
	private Construtora construtoraSelecionada;
	
	
	public String salvar() {

		try {
			obraSelecionada.setCidade(cidadeSelecionada);
			obraSelecionada.setDataCadastro(new Date());
			obraSelecionada.setStatus(true);
			obraSelecionada.setConstrutora(construtoraSelecionada);
			ObraRN obraRN = new ObraRN();
			FacesMessage faces = null;

			if (this.obraSelecionada.getId() != null
					&& this.obraSelecionada.getId() != 0) {
				obraRN.alterar(obraSelecionada);
				//alteraPeriodo(obraSelecionada.getTempoObra());
				faces = new FacesMessage("Obra editada com sucesso!");
			} else {
				obraRN.salvar(obraSelecionada);
				registraPeriodo(obraSelecionada.getTempoObra());
				faces = new FacesMessage("Obra cadastrada com sucesso!");
			}
			FacesContext contexto = FacesContext.getCurrentInstance();
			contexto.addMessage(null, faces);
			this.lista = null;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return null;
	}
	
	public void registraPeriodo(int valPeriodo) {
		Calendar data = Calendar.getInstance();
		Date dataMes = new Date();
		for (int i = 1; i <= valPeriodo; i++) {

			data.add(Calendar.MONTH, 1);
			dataMes = data.getTime();

			DateFormat df = new SimpleDateFormat("MMM/YYYY", new Locale("pt",
					"BR"));
			//System.out.println(df.format(dataMes));

			Periodo periodo = new Periodo(df.format(dataMes), obraSelecionada,
					new Date());
			PeriodoRN periodoRN = new PeriodoRN();
			periodoRN.salvar(periodo);
		}
	}
	
	public void alteraPeriodo(int valPeriodo) {
		Calendar data = Calendar.getInstance();
		Date dataMes = new Date();
		for (int i = 1; i <= valPeriodo; i++) {

			data.add(Calendar.MONTH, 1);
			dataMes = data.getTime();

			DateFormat df = new SimpleDateFormat("MMM/YYYY", new Locale("pt",
					"BR"));
			//System.out.println(df.format(dataMes));

			Periodo periodo = new Periodo(df.format(dataMes), obraSelecionada,
					new Date());
			PeriodoRN periodoRN = new PeriodoRN();
			periodoRN.alterar(periodo);
		}
	}
	
	public String excluir(Boolean status) {
		ObraRN obraRN = new ObraRN();
		obraSelecionada.setDataCadastro(new Date());
		obraSelecionada.setStatus(status);
		obraRN.alterar(obraSelecionada);
		this.lista = null;
		return null;
	}

	public String novo() {
		this.obraSelecionada = new Obra();
		return null;
	}


	public List<Obra> getLista() {
		ObraRN obraRN = new ObraRN();
		if (lista == null) {
			lista = obraRN.listarAtivos(true);
		}
		return lista;
	}

	public Cidade getCidadeSelecionada() {
		return cidadeSelecionada;
	}

	public void setCidadeSelecionada(Cidade cidadeSelecionada) {
		this.cidadeSelecionada = cidadeSelecionada;
	}

	public List<SelectItem> getCidadesSelect() {
		if (this.cidadesSelect == null) {
			cidadesSelect = new ArrayList<SelectItem>();
			CidadeRN cidadeRN = new CidadeRN();
			List<Cidade> listaCidade = cidadeRN.listar();
			if (listaCidade != null && !listaCidade.isEmpty()) {
				SelectItem item;
				for (Cidade cidadeLista : listaCidade) {
					item = new SelectItem(cidadeLista, cidadeLista.getNome());
					cidadesSelect.add(item);
				}
			}
		}
		return cidadesSelect;
	}

	public List<SelectItem> getEstadosSelect() {
		if (this.estadosSelect == null) {
			estadosSelect = new ArrayList<SelectItem>();
			EstadoRN estadoRN = new EstadoRN();
			List<Estado> listaEstado = estadoRN.listar();
			if (listaEstado != null && !listaEstado.isEmpty()) {
				SelectItem item;
				for (Estado estadoLista : listaEstado) {
					item = new SelectItem(estadoLista, estadoLista.getNome());
					estadosSelect.add(item);
				}
			}
		}
		return estadosSelect;
	}

	public Estado getEstadoSelecionado() {
		return estadoSelecionado;
	}

	public void setEstadoSelecionado(Estado estadoSelecionado) {
		this.estadoSelecionado = estadoSelecionado;
	}

	public Obra getObraSelecionada() {
		return obraSelecionada;
	}

	public void setObraSelecionada(Obra obraSelecionada) {
		this.obraSelecionada = obraSelecionada;
	}

	public List<SelectItem> getConstrutoraSelect() {
		if (this.construtoraSelect == null) {
			construtoraSelect = new ArrayList<SelectItem>();
			ConstrutoraRN construtoraRN = new ConstrutoraRN();
			List<Construtora> listaConstrutora = construtoraRN.listarAtivos(true);
			if (listaConstrutora != null && !listaConstrutora.isEmpty()) {
				SelectItem item;
				for (Construtora construtoraLista : listaConstrutora) {
					item = new SelectItem(construtoraLista, construtoraLista.getRazaoSocial());
					construtoraSelect.add(item);
				}
			}
		}
		return construtoraSelect;
	}

	public void setConstrutoraSelect(List<SelectItem> construtoraSelect) {
		this.construtoraSelect = construtoraSelect;
	}

	public Construtora getConstrutoraSelecionada() {
		return construtoraSelecionada;
	}

	public void setConstrutoraSelecionada(Construtora construtoraSelecionada) {
		this.construtoraSelecionada = construtoraSelecionada;
	}
	
}
